package models

import (
	"time"
)

// MockAPI 表示一个模拟API配置
type MockAPI struct {
	ID          uint      `json:"id" gorm:"primaryKey"`
	Name        string    `json:"name"`
	Path        string    `json:"path"`
	Method      string    `json:"method"`
	Description string    `json:"description"`
	GroupName   string    `json:"group_name"` // 分组名称
	Prefix      string    `json:"prefix"`     // 分组URL前缀
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
	Responses   []MockResponse `json:"responses" gorm:"foreignKey:MockAPIID"`
	Rules       []MatchRule    `json:"rules" gorm:"foreignKey:MockAPIID"`
}

// MockResponse 表示API的响应配置
type MockResponse struct {
	ID           uint      `json:"id" gorm:"primaryKey"`
	MockAPIID    uint      `json:"mock_api_id"`
	StatusCode   int       `json:"status_code" gorm:"default:200"`
	ContentType  string    `json:"content_type" gorm:"default:application/json"`
	Headers      string    `json:"headers"` // JSON格式存储
	Body         string    `json:"body"`
	Delay        int       `json:"delay"` // 延迟响应时间(毫秒)
	IsDefault    bool      `json:"is_default"`
	CreatedAt    time.Time `json:"created_at"`
	UpdatedAt    time.Time `json:"updated_at"`
}

// MatchRule 表示请求匹配规则
type MatchRule struct {
	ID        uint      `json:"id" gorm:"primaryKey"`
	MockAPIID uint      `json:"mock_api_id"`
	Type      string    `json:"type"` // path, query, header, body
	Key       string    `json:"key"`
	Value     string    `json:"value"`
	Operator  string    `json:"operator"` // eq, neq, contains, regex
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// RequestLog 表示请求历史记录
type RequestLog struct {
	ID           uint      `json:"id" gorm:"primaryKey"`
	MockAPIID    uint      `json:"mock_api_id"`
	Path         string    `json:"path"`
	Method       string    `json:"method"`
	RequestHeaders string  `json:"request_headers"` // JSON格式存储
	RequestBody  string    `json:"request_body"`
	ResponseID   uint      `json:"response_id"`
	StatusCode   int       `json:"status_code"`
	ResponseTime int       `json:"response_time"` // 响应时间(毫秒)
	CreatedAt    time.Time `json:"created_at"`
}